//短信充值日志查看页面
import smsPayLogHtml from 'ngtemplate!html!../../../tpls/service/service.smsPayLog.html';
//短信发送日志
import smsSendLogHtml from 'ngtemplate!html!../../../tpls/service/service.smsSendLog.html';
//短信编辑
import smsEditHtml from 'ngtemplate!html!../../../tpls/service/service.smsEdit.html';
//短信发送日志表格模板
import smsSendLogTplHtml from 'ngtemplate!html!../../../tpls/service/service.smsSendLog.tpl.html';

class ServiceSmsController {
    constructor($rootScope, $scope, $cookieStore, $timeout, $state, ngDialog, dialogService, setFocusService, ServiceService, getCourseList, iRunner, getGroupList){

        var vm = this;

        vm.$rootScope     = $rootScope;
        vm.$cookieStore   = $cookieStore;
        vm.$timeout       = $timeout;
        vm.$state         = $state;
        vm.ngDialog       = ngDialog;
        vm.dialogService  = dialogService;
        vm.ServiceService = ServiceService;
        vm.setFocusService = setFocusService;
        vm.getCourseList  = getCourseList;
        vm.iRunner        = iRunner;

        //判断短信开关是否打开
        if ($rootScope.raceinfo.sms == 'yes') {
            vm.smsservice = true;
        } else {
            vm.smsservice = false;
            return false;
        }

        // 初始化表单数据
        vm.service = {
            type: '',
            name: '',
            course: '',
            group: '',
            sex: '',
            state: '',
            textarea : '', 
            phone: '',
            previewText: ''
        }
        
        $rootScope.showloading = false;
        vm.textLength = 1;

        // 显示按钮
        $rootScope.loadingText = true;

        // 延迟调用
        var timeout = null;

        //短信发送日志页面模板
        vm.templateSmsSendLog = smsSendLogHtml;

        //短信充值日志页面模板
        vm.templateSmsPayLog = smsPayLogHtml;

        //短信编辑
        vm.templateSmsEdit = smsEditHtml;

        //短信余量
        //调用欧阳接口
        vm.ServiceService.getServiceSmsNum(vm.$cookieStore.get('access_token'), vm.$state.params.company_id)
        .then(function(data) {
            // 成功调用
            data.code==0&&(vm.smsNumber = data.data.count + '条');
            // 调用失败, 提示用户
            (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
            // 登录信息已过期, 请重新登录
            data.code==-1001&&vm.dialogService.error(data.message, true);
            console.log(data)
        }, function(data) {
            console.log('error')
        });


        // 控制tab显示
        vm.tabShow = function(value) {
            //编辑短信模板
            $("#smsedit").removeClass('active');
            //短信充值日志
            $("#smspaylog").removeClass('active');
            //短信发送日志
            $("#smssendlogview").removeClass('active');
            $("#" + value).addClass('active');

            // 短信日志的时候请求短信日志数据
            if (value == 'smspaylog') {
                // 已经请求过的时候不再请求
                if (vm.smspaylog) {
                    // 已经请求过数据，返回
                    return;
                } else {
                    //没有请求国数据，调用接口，请求数据
                    vm.ServiceService.getServiceSmsLog(vm.$cookieStore.get('access_token'), vm.$state.params.company_id)
                    .then(function(data) {
                        // 成功调用
                        vm.smspaylog = data;
                        console.log(data);
                    }, function(data) {
                        console.log('error');
                    });

                }

            } else if (value == 'smssendlogview') {
                // 第一次的时候请求短信发送日志
                if (vm.smsSendlogFlag) {
                    return;
                } else {
                    // 清空模板数据
                    vm.$timeout( () => { vm.smsSendLogTpl = ''; }, 0);
                    // 加载模板
                    vm.$timeout( () => { vm.smsSendLogTpl = smsSendLogTplHtml; }, 0);
                    // 请求数据
                    vm.$timeout( () => { vm.getSendlogList(); }, 0);
                }
            }
        };

        /**
         * [getSendlogList 点击搜索按钮请求短信发送数据]
         * @return {[type]} [description]
         */
        vm.searchSendlogList = function() {
            // 清空模板数据
            vm.$timeout( () => { vm.smsSendLogTpl = ''; }, 0);
            // 加载模板
            vm.$timeout( () => { vm.smsSendLogTpl = smsSendLogTplHtml; }, 0);
            // 请求数据
            vm.$timeout( () => { vm.getSendlogList(); }, 0);
        }

        /**
         * [getSendlogList 搜索短信日志list]
         * @return {[type]} [description]
         */
        vm.getSendlogList = function() {



            vm.status = vm.status || '';
            vm.name = vm.name || '';
            vm.mobile = vm.mobile || '';
            console.log(vm.status + '--' + vm.name + '--' + vm.mobile);

            vm.smsSendlogFlag = true;
            // 短信日志的时候请求短信日志数据
            var URL = iRunner.config.baseUrl;
            //模板id
            var tplId = '#sms_send_log';
            var tableData = angular.element(tplId).DataTable($.extend({}, vm.tableSettings.dataTable, {
                // --- Data
                ajax: URL + '/sms/log?race_id=' + vm.$state.params.race_id + '&access-token=' + this.$cookieStore.get('access_token') + '&status=' + vm.status + '&name=' + vm.name + '&mobile=' + vm.mobile,
                // ajax: URL + '/sms/log?race_id=' + vm.$state.params.race_id + '&access-token=' + this.$cookieStore.get('access_token'),
                order: [0, "desc"], // ID 倒序
                // --- Column
                columns: iRunner.smsSendLog,
                // --- CreatedRow
                createdRow: ( row, data, index ) => {
                },
                // --- Callback
                initComplete: () => {
                }


            }));

            // 上下每页条数下拉框同步
            $('.dataTables_length').find('select').on('change', function(event) {
                const select =  $('.dataTables_length').find('select');
                select.val($(this).val())
            });


            // 短信详细内容
            function runner_table(val) {

                return `<table class="table-detail">
                    <tr>
                        <td>信息内容:</td>
                        <td>${val}</td>
                    </tr>

                </table>`
            }


            // 点击显示详情表格
            $(tplId + ' tbody').on('click', 'td.details-control', function (event) {
                event.stopPropagation();
                var tr = $(this).closest('tr');
                var row = tableData.row( tr );
         
                if ( row.child.isShown() ) {
                    // This row is already open - close it
                    row.child.hide();
                    tr.removeClass('shown');
                }
                else {
                            // console.log(row.data().content);
                            row.child( runner_table(row.data().content)).show();

                    tr.addClass('shown');
                }
            });


        }
            

        // 科目列表
        vm.getCourseList.code==0&&(vm.courselist = vm.getCourseList.data);

        //获取组别列表
        vm.groupList = getGroupList;
        console.log(getGroupList);

        //分组结构
        vm.groupTypeList = [
            // {
            //     gulpName: group.group_name,
            //     gulpTitleList: [ {
            //         gulpTitle: '',
            //         gulpId
            //     } ]
            // }
        ];
        //循环组别列表
        angular.forEach(getGroupList.data, function (group) {
            var groupTitleSaveFlag = false;
            angular.forEach(vm.groupTypeList, function(groupType) {
               if (group.group_name == groupType.gulpName) {
                // alert(group.group_name);
                // alert(groupType.gulpName);
                    groupType.gulpTitleList.push({
                            gulpTitle: group.group_title,
                            gulpId: group.group_id
                        });
                    groupTitleSaveFlag = true;
               }
            });

            if (!groupTitleSaveFlag) {
                vm.groupTypeList.push(
                    {
                        gulpName: group.group_name,
                        gulpTitleList: [{
                            gulpTitle: group.group_title,
                            gulpId: group.group_id
                        }]
                    }
                )
            }
            
        });

        vm.gulpSelect = [
            // {
            //     title: 'gulp_1',
            //     value: '1',
            //     disabled: 'true'
            // }
        ];
        angular.forEach(vm.groupTypeList, function (element) {

            vm.gulpSelect.push({
                title: element.gulpName,
                value: element.gulpName,
                disabled: 'true'
            });

            angular.forEach(element.gulpTitleList, function (element2) {
                vm.gulpSelect.push({
                    title: '　' + element2.gulpTitle,
                    value: element2.gulpId,
                    disabled: ''
                });
            })
        });
        console.log(vm.gulpSelect);

        //初期化取得任务列表
        vm.ServiceService.getServiceSmsList(vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
        .then(function(data) {
            console.log(data.data);
            // 成功调用
            data.code==0&&(vm.smsList = data.data);
            // 调用失败, 提示用户
            (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
            // 登录信息已过期, 请重新登录
            data.code==-1001&&vm.dialogService.error(data.message, true);
        }, function(data) {
            console.log('error')
        });


        /**
         * [chengeSelect 改变过滤条件]
         * @return {[type]} [description]
         */
        vm.changeSelect = function() {
            // 改变过滤条件，获取目标人数
            vm.ServiceService.getServiceSmsTargets(vm.$cookieStore.get('access_token'), vm.$state.params.race_id + '&course_id=' + vm.service.course + '&group_id=' + vm.service.group + '&runner_gender=' + vm.service.sex + '&race_status=' + vm.service.state)
            .then(function(data) {
                // 成功调用
                data.code==0&&(vm.smsTargets = data.data.total);
                // 调用失败, 提示用户
                (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                // 登录信息已过期, 请重新登录
                data.code==-1001&&vm.dialogService.error(data.message, true);
            }, function(data) {
                console.log('error')
            });
        }

        /**
         * [edit 编辑短信任务]
         * @return {[type]} [description]
         */
        vm.edit = function(id) {
            //显示编辑区域
            vm.formshow = true;

            // 获取目标人数
            vm.ServiceService.getServiceSmsTargets(vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
            .then(function(data) {
                // 成功调用
                data.code==0&&(vm.smsTargets = data.data.total);
                // 调用失败, 提示用户
                (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                // 登录信息已过期, 请重新登录
                data.code==-1001&&vm.dialogService.error(data.message, true);
            }, function(data) {
                console.log('error')
            });


            // 判断 编辑/新建 任务
            if (id) {

                vm.ServiceService.getServiceSmsDetail(vm.$cookieStore.get('access_token'), id)
                .then(function(data) {
                    console.log("data.data");
                    console.log(data.data);
                    // 成功调用
                    // alert(data.data.trigger_time.substr(11, 8));
                    // vm.service.time = moment(Date.parse(new Date()))._d;
                    data.code==0&&(
                            // 编辑任务
                            // 初始化表单
                            // alert(data.data.trigger_time.substr(11));
                            vm.service = {
                                id: id,
                                type: data.data.type == 'batch' ? 'plan' : (data.data.type == 'register' ? 'register' : 'score'),
                                date: data.data.trigger_time.substr(0, 10),
                                time: moment(Date.parse(data.data.trigger_time))._d,
                                name: data.data.name,
                                course: data.data.filter_condition.course_id,
                                group: data.data.filter_condition.group_1,
                                sex: data.data.filter_condition.runner_gender,
                                state: data.data.filter_condition.race_status,
                                textarea : data.data.content, 
                                phone: '',
                                previewText: ''
                            }
                        );
                    // 调用失败, 提示用户
                    (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                    // 登录信息已过期, 请重新登录
                    data.code==-1001&&vm.dialogService.error(data.message, true);
                }, function(data) {
                    console.log('error')
                });

            } else {

            //循环组别列表
            console.log(vm.smsList);
            angular.forEach(vm.smsList, function(element) {
                // 成绩短信存在并且状态非取消状态的场合，成绩短信flag置真。
                if (element.type == "score" && element.status != 'halt') {
                    vm.smsScoreFlag = true;
                }
                // 报名短信存在并且状态非取消状态的场合，成绩短信flag置真。
                if (element.type == "register" && element.status != 'halt') {
                    vm.smsRegisterFlag = true;
                }
                // 取消报名短信存在并且状态非取消状态的场合，成绩短信flag置真。
                if (element.type == "cancelreg" && element.status != 'halt') {
                    vm.smsCancelRegFlag = true;
                }
                // 领取赛包短信存在并且状态非取消状态的场合，成绩短信flag置真。
                if (element.type == "claimpack" && element.status != 'halt') {
                    vm.smsClaimPackFlag = true;
                }
                return;
            });

                // 新建任务
                // 初始化表单
                vm.service = {
                    id: '',
                    type: '',
                    date: '',
                    time: '',
                    name: '',
                    course: '',
                    group: '',
                    sex: '',
                    state: '',
                    textarea : '', 
                    phone: '',
                    previewText: ''
                }

            }

        }

        vm.cancelDialog = function(id) {
            vm.ngDialog.open({
                template: `
                <form class="form-horizontal">
                    <div class="form-group">
                        <div class="col-lg-12">
                            <p>是否要取消当前任务？</p>
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-xs-6 text-left">
                            <button type="button" class="btn btn-sm btn-block btn-default" ng-click="closeThisDialog()">否</button>
                        </div>
                        <div class="col-xs-6 text-right">
                            <button type="button" class="btn btn-sm btn-block btn-primary" ng-click="cancel(` + id + `)">是</button>
                        </div>
                    </div>
                </form>`,
                className: 'ngdialog-theme-default ngdialog-alert',
                plain: true
            });
        }

        /**
         * [cancel 取消任务]
         * @return {[type]} [description]
         */
        $rootScope.cancel = function(id) {
            //关闭对话框
            vm.ngDialog.close();
            
            // 取消任务
            vm.ServiceService.getServiceSmsDel(vm.$cookieStore.get('access_token'), id)
            .then(function(data) {
                // 成功调用
                data.code==0&&(vm.dialogService.success("任务已取消"));
                // 调用失败, 提示用户
                (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                // 登录信息已过期, 请重新登录
                data.code==-1001&&vm.dialogService.error(data.message, true);
            }, function(data) {
                console.log('error')
            });
        }

        /**
         * [cancelform 取消编辑]
         * @return {[type]} [description]
         */
        vm.cancelform = function() {
            //清空form内容
            // 初始化表单数据
            vm.service = {
                id: '',
                type: '',
                datetime: '',
                name: '',
                course: '',
                group: '',
                sex: '',
                state: '',
                textarea : '', 
                phone: '',
                previewText: ''
            }
            //隐藏form
            vm.formshow = false;            
        }

        /**
         * [selectSmsTypeScore 选择成绩短信时候清空过滤条件]
         * @return {[type]} [description]
         */
        vm.selectSmsTypeScore = function() {
            // 清空过滤条件
            vm.service.course = '';
            vm.service.group = '';
            vm.service.sex = '';
            vm.service.state = '';

            //重新请求目标人数
            vm.changeSelect();
        }

        /**
         * [selectSmsTypeRegister 选择报名短信的时候获取目标人数]
         * @return {[type]} [description]
         */
        vm.selectSmsTypeRegister = function() {
            // 设置目标人数为0
            vm.smsTargets = 0;
            angular.forEach(vm.courselist, function(data, index) {
                // 循环科目允许报名人数，累加
                vm.smsTargets += parseInt(data.reg_num);
            });
        }

        // 表单提交
        vm.submitForm = function(isValid) {

            //检查任务类型
            if (!vm.service.type) {
                vm.dialogService.error('请选择任务类型');
                return false;
            }

            //定时任务检查时间
            if (vm.service.type == 'plan') {
                if (!vm.service.date || !vm.service.time) {
                    vm.dialogService.error('请填写发送日期和时间');
                    return false;
                }

                //判断时间大于当前时间
                console.log(vm.service.time);
                var datetime = Date.parse(new Date(moment(vm.service.date).format('YYYY-MM-DD') + ' ' + moment(vm.service.time).format('HH:mm:ss')));
                var now = Date.parse(new Date());
                if (now > datetime) {
                    vm.dialogService.error('请填写大于当前时间');
                    return false;
                }
            }

            //任务名称
            if (!vm.service.name) {
                vm.dialogService.error('请填写任务名称');
                return false;
            }

            // 短信编辑内容
            if (!vm.service.textarea) {
                vm.dialogService.error('请编辑短信内容');
                return false;
            }

            //检查当前短信是否超额
            //短信余额
            console.log(vm.smsNumber.substr(0, vm.smsNumber.length - 1));
            var total = 0;
            angular.forEach(vm.smsList, function (element) {
                if (element.status != 'done' && element.status != 'halt') {
                    total += element.send_pending
                }
            });
            //待发送短信总数
            total = total + (vm.textLength ? vm.textLength * vm.smsTargets : 0);

            if (vm.smsNumber.substr(0, vm.smsNumber.length - 1) < total) {
                vm.dialogService.error('当前短信余额不足，充值请联系 400-820-0124。');
                return false;
            }

            var params = {
                id: vm.service.id,
                type: vm.service.type,
                name: vm.service.name,
                content: vm.service.textarea,
                course_id: vm.service.course,
                group_id: vm.service.group,
                runner_gender: vm.service.sex,
                race_status: vm.service.state,
                trigger_time: moment(vm.service.date).format('YYYY-MM-DD') + ' ' + moment(vm.service.time).format('HH:mm:ss')
            }

            // 编辑短信
            if (vm.service.id) {
                vm.ServiceService.postServiceSmsUpdate(params, vm.$cookieStore.get('access_token'), vm.service.id)
                .then(function(data) {
                    console.log(data);
                    // 成功调用
                    data.code==0&&(vm.dialogService.success());
                    // 调用失败, 提示用户
                    (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                    // 登录信息已过期, 请重新登录
                    data.code==-1001&&vm.dialogService.error(data.message, true);
                    console.log(data)
                }, function(data) {
                    console.log('编辑短信错误')
                });

            } else {
                //创建短信任务
                vm.ServiceService.postServiceSmsCreate(params, vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
                .then(function(data) {
                    console.log(data);
                    // 成功调用
                    data.code==0&&(vm.dialogService.success());
                    // 调用失败, 提示用户
                    (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                    // 登录信息已过期, 请重新登录
                    data.code==-1001&&vm.dialogService.error(data.message, true);
                    console.log(data)
                }, function(data) {
                    console.log('创建短信任务错误')
                });
            }

            return false;
        }

        // 文本框内插入字符串
        vm.addText = function(value) {
                var element  = document.getElementById('textarea'),
                    startPos = element.selectionStart,
                    endPos   = element.selectionEnd;
                       
                vm.service.textarea = vm.service.textarea.substr(0, startPos) + value + vm.service.textarea.substr(endPos, vm.service.textarea.length);

                //文本框获取焦点                
                vm.setFocusService.setFocus('textarea');
        };

        // 短信预览
        $scope.$watch(angular.bind(vm, () => vm.service.textarea ), (newValue, oldValue) => {

            if (newValue) {

                if (timeout) {
                    vm.$timeout.cancel(timeout);
                }

                timeout = vm.$timeout(function() {
                    // 短信预览
                    vm.ServiceService.postServiceSmsPreview({text: vm.service.textarea}, vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
                    .then(function(data) {
                        console.log(data);
                        // 成功调用
                        data.code==0&&(vm.service.previewText=data.data);
                        // 调用失败, 提示用户
                        (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);
                        // 登录信息已过期, 请重新登录
                        data.code==-1001&&vm.dialogService.error(data.message, true);
                        console.log(data)
                    }, function(data) {
                        console.log('error')
                    });
                    console.log(newValue)
                }, 350);
            }
        });
        
        // 显示短信字数
        $scope.$watch(angular.bind(vm, () => vm.service.previewText ), (newValue, oldValue) => {
            if (newValue) {
                vm.textLength = Math.ceil(newValue.length/61);
            }
        });

        // 发送测试短信
        vm.sendMsg = function(value) {
            var isValid = /^(((13[0-9]{1})|(15[0-35-9]{1})|(17[0-9]{1})|(18[0-9]{1}))+\d{8})$/.test(value);

            // 验证失败, 提示用户
            if (!isValid) {
                vm.dialogService.error('请输入正确的手机号码')
            }

            // 验证通过
            if (isValid) {
                console.log(value)

                // 短信测试发送
                vm.ServiceService.postServiceSmsTest({text: vm.service.previewText.substr(6), cell: vm.service.phone}, vm.$cookieStore.get('access_token'), vm.$state.params.race_id)
                .then(function(data) {

                    // 成功调用
                    if (data.code==0) {
                        vm.ngDialog.open({
                            template: '<p>短信测试发送成功</p>',
                            className: 'ngdialog-theme-default ngdialog-alert',
                            plain: true
                        });
                    }

                    // 调用失败, 提示用户
                    (data.code!=0&&data.code!=-1001)&&vm.dialogService.error(data.message);

                    // 登录信息已过期, 请重新登录
                    data.code==-1001&&vm.dialogService.error(data.message, true);

                    console.log(data);
                }, function(data) {
                    console.log('error');
                });
            }

            return false;
        };

        vm.tableSettings = {
            KEYCODE: {
                ENTER: 13,
                DELETE: 46,
                BACKSPACE: 8,
                UP: 38,
                DOWN: 40
            },
            imageTypes: "*.gif;*.jpg;*.jpeg;*.png;",
            dataTable: {

                /*基本参数设置，以下参数设置和默认效果一致*/
                "paginate": true, //翻页功能
                "lengthChange": true, //改变每页显示数据数量
                "filter": true, //过滤功能
                "sort": true, //排序功能
                "info": true,//页脚信息
                "autoWidth": true,//自动宽度
                /*默认排序设置*/
                // "aSorting": [[ 4, "desc" ]],//设置第5个元素为默认排序
                /*默认翻页样式设置*/
                "paginationType": "full_numbers",
                /*是否开启主题*/
                // "jQueryUI": true,
                /*语言设置*/
                "language": {
                    "lengthMenu": "每页显示 _MENU_条",
                    "zeroRecords": "没有找到符合条件的数据",
                    "processing": "加载中...",
                    "info": "当前第 _START_ - _END_ 条　共计 _TOTAL_ 条",
                    "infoEmpty": "没有记录",
                    // "infoFiltered": "(从 _MAX_ 条记录中过滤)",
                    "infoFiltered": "",
                    "search": "搜索：",
                    "paginate": {
                        "first": "首页",
                        "previous": "前一页",
                        "next": "后一页",
                        "last": "尾页"
                    }
                },

                // --- Data
                processing: true,
                serverSide: true,
                // --- Language
                // language: $.extend({}, iRunner.l("DATATABLE"), {
                //     processing: 'Loading...'
                // }),
                // --- Pagination
                pageLength: 50,
                pagingType: "full_numbers",
                lengthMenu: [50, 100, 200],
                // dom: "rt<'page-list-footer'lp>"
                dom: '<"page-list-footer"<br/>lp<"clear">irt<"page-list-footer"lp<"clear">ir'
            }
        }

    }
}

ServiceSmsController.$inject = ['$rootScope', '$scope', '$cookieStore', '$timeout', '$state', 'ngDialog', 'dialogService', 'setFocusService', 'ServiceService', 'getCourseList', 'iRunner', 'getGroupList']; 

export default ServiceSmsController;